# Copyright (C) 2012-2021  The Bochs Project
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

# Makefile for the iodev/display component of bochs


@SUFFIX_LINE@

prefix          = @prefix@
exec_prefix     = @exec_prefix@
srcdir          = @srcdir@
VPATH = @srcdir@
bindir          = @bindir@
libdir          = @libdir@
datarootdir     = @datarootdir@
mandir          = @mandir@
man1dir         = $(mandir)/man1
man5dir         = $(mandir)/man5
docdir          = $(datarootdir)/doc/bochs
sharedir        = $(datarootdir)/bochs
top_builddir    = ..
top_srcdir      = @top_srcdir@

SHELL = @SHELL@

@SET_MAKE@

CXX = @CXX@
CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@ @GUI_CXXFLAGS@

LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
RANLIB = @RANLIB@
PLUGIN_PATH=@libdir@
top_builddir    = ../..
LIBTOOL=@LIBTOOL@
WIN32_DLL_IMPORT_LIBRARY=../../@WIN32_DLL_IMPORT_LIB@

DISPLAY_OBJS = @DISPLAY_OBJS@
DISPLAY_EXTRA_OBJS = @DISPLAY_EXTRA_OBJS@

BX_INCDIRS = -I.. -I../.. -I$(srcdir)/.. -I$(srcdir)/../.. -I../../@INSTRUMENT_DIR@ -I$(srcdir)/../../@INSTRUMENT_DIR@
LOCAL_CXXFLAGS = $(MCH_CFLAGS)

OBJS_THAT_CAN_BE_PLUGINS = \
  vga.o \
  $(DISPLAY_OBJS)

OBJS_THAT_SUPPORT_OTHER_PLUGINS = \
  vgacore.o \
  ddc.o \
  $(DISPLAY_EXTRA_OBJS)

NONPLUGIN_OBJS = @IODEV_EXT_NON_PLUGIN_OBJS@
PLUGIN_OBJS = @IODEV_EXT_PLUGIN_OBJS@
DISPLAY_DLL_TARGETS = @DISPLAY_DLL_TARGETS@

all: libdisplay.a

plugins: @PLUGIN_TARGET_2@

plugins_gcc: $(PLUGIN_OBJS:@PLUGIN_LIBNAME_TRANSFORMATION@)

plugins_msvc: bx_vga.dll $(DISPLAY_DLL_TARGETS)

libdisplay.a: $(NONPLUGIN_OBJS)
	@RMCOMMAND@ libdisplay.a
	@MAKELIB@ $(NONPLUGIN_OBJS)
	$(RANLIB) libdisplay.a

# standard compile rule for C++ files
.@CPP_SUFFIX@.o:
	$(CXX) @DASH@c  $(CPPFLAGS) $(CXXFLAGS) $(LOCAL_CXXFLAGS) @CXXFP@$< @OFP@$@

##### building plugins with libtool
%.lo: %.@CPP_SUFFIX@
	$(LIBTOOL) --mode=compile --tag CXX $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(LOCAL_CXXFLAGS) $< -o $@

libbx_%.la: %.lo
	$(LIBTOOL) --mode=link --tag CXX $(CXX) $(LDFLAGS) -module $< -o $@ -rpath $(PLUGIN_PATH)

# special link rules for plugins that require more than one object file
libbx_vga.la: vga.lo vgacore.lo ddc.lo
	$(LIBTOOL) --mode=link --tag CXX $(CXX) $(LDFLAGS) -module vga.lo vgacore.lo ddc.lo -o libbx_vga.la -rpath $(PLUGIN_PATH)

libbx_svga_cirrus.la: svga_cirrus.lo vgacore.lo ddc.lo
	$(LIBTOOL) --mode=link --tag CXX $(CXX) $(LDFLAGS) -module svga_cirrus.lo vgacore.lo ddc.lo -o libbx_svga_cirrus.la -rpath $(PLUGIN_PATH)

libbx_geforce.la: geforce.lo vgacore.lo ddc.lo
	$(LIBTOOL) --mode=link --tag CXX $(CXX) $(LDFLAGS) -module geforce.lo vgacore.lo ddc.lo -o libbx_geforce.la -rpath $(PLUGIN_PATH)

libbx_voodoo.la: voodoo.lo banshee.lo vgacore.lo ddc.lo
	$(LIBTOOL) --mode=link --tag CXX $(CXX) $(LDFLAGS) -module voodoo.lo banshee.lo vgacore.lo ddc.lo -o libbx_voodoo.la -rpath $(PLUGIN_PATH)

#### building DLLs for win32 (Cygwin and MinGW/MSYS)
bx_%.dll: %.o
	$(CXX) $(CXXFLAGS) -shared -o $@ $< $(WIN32_DLL_IMPORT_LIBRARY)

# special link rules for plugins with Cygwin, MinGW/MSYS and MSVC nmake
bx_vga.dll: vga.o vgacore.o ddc.o
	@LINK_DLL@ vga.o vgacore.o ddc.o $(WIN32_DLL_IMPORT_LIBRARY)

bx_svga_cirrus.dll: svga_cirrus.o vgacore.o ddc.o
	@LINK_DLL@ svga_cirrus.o vgacore.o ddc.o $(WIN32_DLL_IMPORT_LIBRARY)

bx_geforce.dll: geforce.o vgacore.o ddc.o
	@LINK_DLL@ geforce.o vgacore.o ddc.o $(WIN32_DLL_IMPORT_LIBRARY)

bx_voodoo.dll: voodoo.o banshee.o vgacore.o ddc.o
	@LINK_DLL@ voodoo.o banshee.o vgacore.o ddc.o $(WIN32_DLL_IMPORT_LIBRARY)

##### end DLL section

clean:
	@RMCOMMAND@ -rf .libs *.lo *.o *.la *.a *.dll *.exp *.lib

dist-clean: clean
	@RMCOMMAND@ Makefile

###########################################
# dependencies generated by
#  gcc -MM -I.. -I../.. -I../../instrument/stubs *.cc | sed -e 's/\.cc/.@CPP_SUFFIX@/g'
#  gcc -MM -I.. -I../.. -I../../instrument/stubs *.cc | \
#     sed -e 's/\.cc/.@CPP_SUFFIX@/g' -e 's/\.o:/.lo:/g'
#
# This means that every source file is listed twice, once with a .o rule
# and then again with an identical .lo rule.  The .lo rules are used when
# building plugins.
###########################################
banshee.o: banshee.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h \
 ../../osdep.h ../../gui/paramtree.h ../../logio.h \
 ../../instrument/stubs/instrument.h ../../misc/bswap.h ../../plugin.h \
 ../../extplugin.h ../../param_names.h ../../pc_system.h \
 ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 ../pci.h vgacore.h ddc.h voodoo.h ../virt_timer.h ../../bxthread.h \
 bitblt.h voodoo_types.h voodoo_data.h voodoo_main.h
ddc.o: ddc.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep.h \
 ../../gui/paramtree.h ../../logio.h ../../instrument/stubs/instrument.h \
 ../../misc/bswap.h ../../gui/siminterface.h ddc.h ../../param_names.h
svga_cirrus.o: svga_cirrus.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h \
 ../../osdep.h ../../gui/paramtree.h ../../logio.h \
 ../../instrument/stubs/instrument.h ../../misc/bswap.h ../../plugin.h \
 ../../extplugin.h ../../param_names.h ../../pc_system.h \
 ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 vgacore.h bitblt.h ddc.h svga_cirrus.h ../virt_timer.h
geforce.o: geforce.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h \
 ../../osdep.h ../../gui/paramtree.h ../../logio.h \
 ../../instrument/stubs/instrument.h ../../misc/bswap.h ../../plugin.h \
 ../../extplugin.h ../../param_names.h ../../pc_system.h \
 ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 vgacore.h bitblt.h ddc.h geforce.h ../virt_timer.h
vga.o: vga.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h ../../osdep.h \
 ../../gui/paramtree.h ../../logio.h ../../instrument/stubs/instrument.h \
 ../../misc/bswap.h ../../plugin.h ../../extplugin.h ../../param_names.h \
 ../../pc_system.h ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 vgacore.h ddc.h vga.h ../virt_timer.h
vgacore.o: vgacore.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h \
 ../../osdep.h ../../gui/paramtree.h ../../logio.h \
 ../../instrument/stubs/instrument.h ../../misc/bswap.h ../../plugin.h \
 ../../extplugin.h ../../param_names.h ../../pc_system.h \
 ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 vgacore.h ../virt_timer.h
voodoo.o: voodoo.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h ../../osdep.h \
 ../../gui/paramtree.h ../../logio.h ../../instrument/stubs/instrument.h \
 ../../misc/bswap.h ../../plugin.h ../../extplugin.h ../../param_names.h \
 ../../pc_system.h ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 ../pci.h vgacore.h ddc.h voodoo.h ../virt_timer.h ../../bxthread.h \
 bitblt.h voodoo_types.h voodoo_data.h voodoo_main.h voodoo_func.h
banshee.lo: banshee.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h \
 ../../osdep.h ../../gui/paramtree.h ../../logio.h \
 ../../instrument/stubs/instrument.h ../../misc/bswap.h ../../plugin.h \
 ../../extplugin.h ../../param_names.h ../../pc_system.h \
 ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 ../pci.h vgacore.h ddc.h voodoo.h ../virt_timer.h ../../bxthread.h \
 bitblt.h voodoo_types.h voodoo_data.h voodoo_main.h
ddc.lo: ddc.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep.h \
 ../../gui/paramtree.h ../../logio.h ../../instrument/stubs/instrument.h \
 ../../misc/bswap.h ../../gui/siminterface.h ddc.h ../../param_names.h
svga_cirrus.lo: svga_cirrus.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h \
 ../../osdep.h ../../gui/paramtree.h ../../logio.h \
 ../../instrument/stubs/instrument.h ../../misc/bswap.h ../../plugin.h \
 ../../extplugin.h ../../param_names.h ../../pc_system.h \
 ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 vgacore.h bitblt.h ddc.h svga_cirrus.h ../virt_timer.h
geforce.lo: geforce.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h \
 ../../osdep.h ../../gui/paramtree.h ../../logio.h \
 ../../instrument/stubs/instrument.h ../../misc/bswap.h ../../plugin.h \
 ../../extplugin.h ../../param_names.h ../../pc_system.h \
 ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 vgacore.h bitblt.h ddc.h geforce.h ../virt_timer.h
vga.lo: vga.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h ../../osdep.h \
 ../../gui/paramtree.h ../../logio.h ../../instrument/stubs/instrument.h \
 ../../misc/bswap.h ../../plugin.h ../../extplugin.h ../../param_names.h \
 ../../pc_system.h ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 vgacore.h ddc.h vga.h ../virt_timer.h
vgacore.lo: vgacore.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h \
 ../../osdep.h ../../gui/paramtree.h ../../logio.h \
 ../../instrument/stubs/instrument.h ../../misc/bswap.h ../../plugin.h \
 ../../extplugin.h ../../param_names.h ../../pc_system.h \
 ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 vgacore.h ../virt_timer.h
voodoo.lo: voodoo.@CPP_SUFFIX@ ../iodev.h ../../bochs.h ../../config.h ../../osdep.h \
 ../../gui/paramtree.h ../../logio.h ../../instrument/stubs/instrument.h \
 ../../misc/bswap.h ../../plugin.h ../../extplugin.h ../../param_names.h \
 ../../pc_system.h ../../bx_debug/debug.h ../../config.h ../../osdep.h \
 ../../memory/memory-bochs.h ../../gui/siminterface.h ../../gui/gui.h \
 ../pci.h vgacore.h ddc.h voodoo.h ../virt_timer.h ../../bxthread.h \
 bitblt.h voodoo_types.h voodoo_data.h voodoo_main.h voodoo_func.h
